iT邦幫忙

2022 iThome 鐵人賽

DAY 2
1
Software Development

讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路系列 第 2

[Day 2] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - 環境需求與介紹

  • 分享至 

  • xImage
  •  
tags: .NET6 C#, LineBot, Line Messaging API

[Day 2] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - 環境需求與介紹

環境需求

為了開發時進行時順暢一點,現在先把需要的環境都安裝吧!

這裡先列出了所有連結,若需要安裝教學請留言告知,後續有空間就補上!
下面說明了使用的理由,各位可以先看看再決定要不要使用一樣的工具。

Visual Studio 2022 & .NET 6

使用原因

因為這次的主題是使用 .NET 6 與 Line Services 串接,而在所有的 Visual Studio 版本中,只有 Visual Studio 2022 支援 .NET 6,所以才使用 Visual Studio 2022。

另外在 Windows 的 Visual Studio 2022 中開發 .NET 6,可是擁有 Hot Reload 的功能,這功能的強大在於不需要每次修改程式就要 Restart,極大的提高了開發速度。

當然這些功能也能夠在 Visual Studio Code 中使用,需要安裝 .NET 的 SDK,不過為了方便性,我們還是直接使用 Visual Studio 2022 吧,若你是已經在使用 VSCode 開發 .NET 6 的人也不用特意換成 Visual Studio 2022。

ngrok

使用原因

在開發 Linebot 時,因為伺服器需要偵測使用者與 Linebot 的互動才能做出預期的行為,所以 Line 有提供 Webhook url 的設定,使用者在 Line 上因動作產生的事件會透過 Webhook url 傳到我們的伺服器讓我們做處理 (webhook有點像生活裏的 事故連絡人,事情發生時要找誰負責)。

而 Line 要求的 webhook url 是需要 https 協定並且可由外部連線的網址,但平常在本機上開發伺服器或網頁的你不太容易得到一組固定IP來使用。

那有人會說:「可以把程式部署到雲端上,就可以有固定IP做測試了阿!」
但你知道嗎? 部署所花的時間會嚴重的拖慢你的開發效率,一點點小改動需要測試時到底是該繼續寫還是要花大把的時間等待部署完成再測試呢。

所以這時後 ngrok 的出現解決了這個問題,只要簡單的指令,ngrok就能提供一串外部可存取的網址連線到你的本地端,將這個網址提供給需要連線測試的人就可以了!(重點還是免費的><)

DBeaver

使用原因

DBeaver 是一款可以方便又快速操作 DB 的 GUI,DBeaver支援所有流行的關係資料庫:MySQL、SQLite、SQL Server、MariaDB、PostgreSQL、Oracle等等。也支援 NoSQL 資料庫:MongoDB,Cassandra,Redis,Apache Hive等。

其實任何一款方便好操作的 DB GUI 即可,可以用自己最習慣的 即可 ~

SQLite3

使用原因

這個系列中預計會使用的 DB 我們選用 SQLite3,因為這一系列的情境使用 DB 的情境並不多,主要關注在 Line Services 的串接,所以才選用了極輕量化的 SQLite3 當作DB使用。(它檔案大小才 1MB不到 - by Wikipedia)


接著進入 .NET 6 的程式開發部份

Controller API V.S Minimal API 開發模式比較

因為 .NET 6 支援傳統的 Controller 開發,同時也支援新導入的 Minimal API 開發,接著就讓我們用實際的動作來一一走過,實際體驗二種模式的差異囉。

- Controller Project 模式

  • 首先點擊右方“新增“,建立一個新專案

  • 第二步選擇範本,這邊選擇 web 應用程式 ASP.NET Core 下的 API

  • 因為這個範本要使用 Controller 機制開發,這一步就使用預設的選項,值得注意的是第二個勾選的選項"使用控制器(取消勾選以使用最低API)",這就是 .NET 6 推出的 Minimal API,等這個範本結束我們就來試試看 Minimal API! 現在先保持勾選吧!

  • 上一步按下繼續後就是輸入專案名稱了,若有使用 git 的需求則可以勾選下方的版本控制選項,我們這邊是簡單的範本,就不勾了~最後按下建立就會建立新的專案。

  • 進入程式畫面後,我把這兩個範本裡的檔案刪掉了,當然這刪不刪都不影響我們接下來要做的事,所以就看你自己吧。

  • 在 Controller 資料夾 "右鍵"->"新增類別(class)"->選擇空的類別並命名為 "HelloWorldController"

  • 建立檔案後就先複製下方的程式碼吧,現在開始說明。

  • 這份程式碼宣告了

    1. 此 Class 是 Controller
    2. Controller 的 Route ("api/[Controller]") 會轉成
    3. Controller 內有兩個 function -> 兩支 API
      • HelloWorld
      • HelloWorld2
//HelloWorldController.cs
using Microsoft.AspNetCore.Mvc;

namespace LineBotMessage.Controllers
{
    [ApiController]
    [Route("api/[Controller]")]
    public class HelloWorldController : ControllerBase
    { 
        public HelloWorldController()
        {

        }    

        [HttpGet]
        public string HelloWorld()
        {
            return "Hello World";
        }    

        [HttpGet("Get")]
        public string HelloWorld2()
        {
            return "Hello World 2";
        }
    }
}
  • 按下執行後會跳出 swagger 的頁面,並且可以看到畫面上有兩支API
  • 分別的測試結果,可以判斷出 Route 設定的效果
    • Hello World
    • Hello World 2

- Minimal API Project 模式

現在讓我們來看看 .NET 6 推出的 Minimal API 會長怎樣吧 !

  • 新增專案時這一步取消勾選第二個使用控制器的選項

  • 建立專案之後會發現資料夾結構是直接少了 Controllers 的資料夾,更簡潔了

  • 初始 Program 裡面第 24行到36行就是 Minamal API 的樣子了,有學過 NodeJs 的朋友應該覺得非常熟悉

  • 我這邊一樣刪掉範本裡的 API , 只需要 Hello World 的 API,刪或不刪就由你自己決定吧。

  • 另外新增兩隻與Controller 範本做相同事情的 Hello World API

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.MapGet("api/HelloWorld", () =>
{
    return "Hello World";
});

app.MapGet("api/HelloWorld/Get", () =>
{
    return "Hello World 2";
});

app.Run();

結語

這次開發工具的介紹就到這邊,下一篇的主題就正式進入到 Line 的說明了 !! 會先介紹 Line 開發者網站,是一個管理 Line 服務的平台,Line 登入、Line Bot 的串接都需要先在這裡創建 channel,各位下一篇見。


上一篇
[Day 1] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - 序幕
下一篇
[Day 3] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - Line Services 初始設置
系列文
讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言